// 这些工具类型专用于字符串字面量类型，包括 Uppercase、Lowercase、Capitalize 与 Uncapitalize，看名字就能知道它们的作用：字符串大写、字符串小写、首字母大写与首字母小写：
;(function () {
  type Heavy<T extends string> = `${Uppercase<T>}`
  type Respect<T extends string> = `${Capitalize<T>}`
  type HeavyName = Heavy<'linbudu'> // "LINBUDU"
  type RespectName = Respect<'linbudu'> // "Linbudu"

  //如果要修改成我们更习惯的小驼峰形式呢？此时我们就可以使用上 Capitalize 工具类型了：

  type CopyWithRename2<T extends object> = {
    [K in keyof T as `modified${Capitalize<string & K>}`]: T[K]
  }

  type CopiedFoo2 = CopyWithRename<Foo>
})()
